Fix java tree..(part 2)
[f432xdd.git] / java / Graph Editor / src / interfaces / GraphFrame.java
blob739642eb1e2cb43affa153229850c7f5614909f2
1 package interfaces;
3 import models.*;
4 import controllers.SelectionController;
5 import controllers.actions.*;
6 import java.awt.Event;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.awt.event.KeyEvent;
10 import java.io.File;
12 import javax.swing.*;
13 import javax.swing.undo.*;
16 public class GraphFrame extends JFrame {
17 private static final long serialVersionUID = -7929100929760152271L;
18 private SelectionController selectionController;
19 private GraphPanel panel;
20 private UndoManager undoManager;
22 private JMenuBar menubar;
23 private JMenu menuOptionFile;
24 private JMenu menuOptionEdit;
26 private JMenuItem menuOptionFileOpen;
27 private JMenuItem menuOptionFileSave;
28 private JMenuItem menuOptionFileClose;
30 private JMenuItem menuOptionEditUndo;
31 private JMenuItem menuOptionEditRedo;
32 private JMenuItem menuOptionEditAddNode;
33 private JMenuItem menuOptionEditAddEdge;
34 private JMenuItem menuOptionEditRemoveNode;
36 private ActionListener actionListener;
38 public GraphFrame(GraphModel model){
40 this.setTitle("Graph Editor");
41 this.setSize(500, 500);
42 menubar = new JMenuBar();
43 this.setFocusable(true);
45 menuOptionFile = new JMenu("File");
46 menuOptionFile.setMnemonic(KeyEvent.VK_F);
47 menuOptionEdit = new JMenu("Edit");
48 menuOptionEdit.setMnemonic(KeyEvent.VK_E);
50 menuOptionFileClose = new JMenuItem("Close program",KeyEvent.VK_C);
51 menuOptionFileClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, Event.CTRL_MASK));
53 menuOptionFileOpen = new JMenuItem("Openen",KeyEvent.VK_O);
54 menuOptionFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK));
56 menuOptionEditUndo = new JMenuItem("Ongedaan maken",KeyEvent.VK_Z);
57 menuOptionEditUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK));
59 menuOptionEditAddNode = new JMenuItem("Knoop toevoegen",KeyEvent.VK_N);
60 menuOptionEditAddNode.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK));
62 menuOptionEditAddEdge = new JMenuItem("Kant toevoegen",KeyEvent.VK_M);
63 menuOptionEditAddEdge.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, Event.CTRL_MASK));
65 menuOptionEditRemoveNode = new JMenuItem("Delete Node",KeyEvent.VK_D);
66 menuOptionEditRemoveNode.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,Event.SHIFT_MASK));
68 menuOptionEditRedo = new JMenuItem("Herhalen",KeyEvent.VK_R);
69 menuOptionEditRedo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,Event.CTRL_MASK));
71 menuOptionFileSave = new JMenuItem("Opslaan",KeyEvent.VK_S);
72 menuOptionFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,Event.CTRL_MASK));
74 actionListener = new ActionListener(){
75 public void actionPerformed(ActionEvent arg0) {
76 if(arg0.getSource() == menuOptionFileSave)
77 saveFile();
78 else if(arg0.getSource() == menuOptionFileClose)
79 System.exit(0);
80 else if(arg0.getSource() == menuOptionFileOpen)
81 openFile();
82 else if(arg0.getSource() == menuOptionEditUndo) {
83 undoManager.undo();
84 notifyUndoManagerChanged();
85 } else if (arg0.getSource() == menuOptionEditRedo) {
86 undoManager.redo();
87 notifyUndoManagerChanged();
88 } else if(arg0.getSource() == menuOptionEditAddNode) {
89 GraphFrame.this.undoManager.addEdit(new AddNode(GraphFrame.this.selectionController));
90 notifyUndoManagerChanged();
91 } else if(arg0.getSource() == menuOptionEditAddEdge) {
92 selectionController.doAddEdge();
93 notifyUndoManagerChanged();
94 } else if(arg0.getSource() == menuOptionEditRemoveNode) {
95 undoManager.addEdit(new DeleteNode(selectionController));
96 notifyUndoManagerChanged();
101 menuOptionFileOpen.addActionListener(actionListener);
102 menuOptionFileSave.addActionListener(actionListener);
103 menuOptionFileClose.addActionListener(actionListener);
105 menuOptionEditAddNode.addActionListener(actionListener);
106 menuOptionEditAddEdge.addActionListener(actionListener);
107 menuOptionEditUndo.addActionListener(actionListener);
108 menuOptionEditRedo.addActionListener(actionListener);
109 menuOptionEditRemoveNode.addActionListener(actionListener);
111 menuOptionFile.add(menuOptionFileOpen);
112 menuOptionFile.add(menuOptionFileSave);
113 menuOptionFile.addSeparator();
114 menuOptionFile.add(menuOptionFileClose);
116 menuOptionEdit.add(menuOptionEditAddNode);
117 menuOptionEdit.add(menuOptionEditAddEdge);
118 menuOptionEdit.addSeparator();
119 menuOptionEdit.add(menuOptionEditUndo);
120 menuOptionEdit.add(menuOptionEditRedo);
121 menuOptionEdit.add(menuOptionEditRemoveNode);
123 menubar.add(menuOptionFile);
124 menubar.add(menuOptionEdit);
125 setJMenuBar(menubar);
127 panel = new GraphPanel(model);
128 add(panel);
129 undoManager = new UndoManager();
130 this.notifyUndoManagerChanged();
132 setVisible(true);
135 private void openFile()
137 final JFileChooser fc = new JFileChooser();
138 int returnVal = fc.showOpenDialog(this);
139 if(returnVal == JFileChooser.APPROVE_OPTION){
140 doOpenFile(fc.getSelectedFile());
144 private void notifyUndoManagerChanged(){
145 menuOptionEditRedo.setEnabled(undoManager.canRedo());
146 menuOptionEditUndo.setEnabled(undoManager.canUndo());
148 menuOptionEditRedo.setText(this.undoManager.getRedoPresentationName());
149 menuOptionEditUndo.setText(this.undoManager.getUndoPresentationName());
153 private void doOpenFile(File f) {
154 try {
155 GraphModel model = GraphModel.fromFile(f);
156 panel.setModel(model);
157 this.undoManager.discardAllEdits();
158 notifyUndoManagerChanged();
159 } catch (Exception e) {
160 JOptionPane.showMessageDialog(this,
161 "An error occured trying to read the input file. \r\n" + e.getMessage(),
162 "Error", JOptionPane.ERROR_MESSAGE);
166 private void saveFile()
168 final JFileChooser fc = new JFileChooser();
169 int returnVal = fc.showSaveDialog(this);
170 if(returnVal == JFileChooser.APPROVE_OPTION){
171 File file = fc.getSelectedFile();
172 try{
173 panel.getModel().writeToFile(file);
174 }catch(Exception e){
175 JOptionPane.showMessageDialog(this,
176 "An error occured trying to save the current state to a file. \r\n" + e.getMessage() ,
177 "Error", JOptionPane.ERROR_MESSAGE);
182 public void addAction(UndoableEdit action){
183 undoManager.addEdit(action);
184 notifyUndoManagerChanged();
187 public void selectedObject(boolean selected) {
188 menuOptionEditAddEdge.setEnabled(selected);
189 menuOptionEditRemoveNode.setEnabled(selected);
192 public void setSelectionController(SelectionController s) {
193 selectionController = s;
194 this.getPanel().setSelectionController(s);
196 public GraphPanel getPanel()
198 return panel;